WaitList provides a collection for synchronizing threads. Internally, the collection owns
MAX_CONCURRENCY positions of rendezvous called Waiter (private). You can call
WaitList::link
to allocate a waiter and return a
WaitGuard. Holding a wait guard allows one to construct an
iterator or random-accessor over all subsequent threads in the data structure. In this way,
the head of the list can iterate the list, batching operations together, and then iterate the
list again to distribute the batched work.